package simple.number;

/**
 * <a href="https://leetcode.cn/problems/perfect-number/">507. 完美数</a>
 * 对于一个 正整数，如果它和除了它自身以外的所有 正因子 之和相等，我们称它为 「完美数」。
 * 给定一个 整数 n， 如果是完美数，返回 true；否则返回 false。
 * 示例 1：
 *   输入：num = 28
 *   输出：true
 *   解释：28 = 1 + 2 + 4 + 7 + 14
 *   1, 2, 4, 7, 和 14 是 28 的所有正因子。
 * 示例 2：
 *   输入：num = 7
 *   输出：false
 * 提示：
 *   1 <= num <= 10^8
 * @author 刘学松
 * @date 2023-05-22 13:50
 */
public class 完美数 {
    public static void main(String[] args) {

//        System.out.println(checkPerfectNumber(33550336));
        for (int i = 2; i < 100000000; i++) {
            if (checkPerfectNumber(i)) {
                System.out.println(i);
            }
        }
    }
    public static boolean checkPerfectNumber(int num) {
        if (num == 1) {
            return false;
        }
        int n = 2;
        int sum = 1;
        while (n*n <= num) {
            if (num % n == 0) {
                int m = num/n;
                sum += n;
                if (m != n) {
                    sum += m;
                }
            }
            ++n;
        }
        return sum == num;
    }
}
